<?php

require_once __DIR__.'/../vendor/autoload.php';

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}

if(file_exists(__DIR__.'/../app/Tools/functions.php'))  
{  
	require __DIR__.'/../app/Tools/functions.php'; 
}

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

$app->withEloquent();
$app->withFacades(true);
$app->configure('app');
$app->configure('auth');
$app->configure('mail');
$app->configure('database');
$app->configure('cache');
$app->configure('excel');
$app->configure('log');
/*
|--------------------------------------------------------------------------
| Register Container Bindings
|--------------------------------------------------------------------------
|
| Now we will register a few bindings in the service container. We will
| register the exception handler and the console kernel. You may add
| your own bindings here if you like or you can make another file.
|
*/

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);
/*
|--------------------------------------------------------------------------
| Register Middleware
|--------------------------------------------------------------------------
|
| Next, we will register the middleware with the application. These can
| be global middleware that run before and after each request into a
| route or middleware that'll be assigned to some specific routes.
|
*/

 $app->middleware([
        App\Http\Middleware\RenderMiddleware::class
 ]);

 $app->routeMiddleware([
     'auth' => App\Http\Middleware\Authenticate::class,
 ]);

/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
|
| Here we will register all of the application's service providers which
| are used to bind services into the container. Service providers are
| totally optional, so you are not required to uncomment this line.
|
*/

 $app->register(Maatwebsite\Excel\ExcelServiceProvider::class);
 $app->register(App\Providers\AuthServiceProvider::class);
 $app->register(App\Providers\DatabaseServiceProvider::class);
 $app->register(Illuminate\Redis\RedisServiceProvider:: class);
 // $app->register(Mews\Captcha\CaptchaServiceProvider::class);
 
/*
|--------------------------------------------------------------------------
| Load The Application Routes
|--------------------------------------------------------------------------
|
| Next we will include the routes file so that they can all be added to
| the application. This will provide all of the URLs the application
| can respond to, as well as the controllers that may handle them.
|
*/

 $app->group(['namespace' => 'App\Http\Controllers' ], function ($app) {
     require __DIR__.'/../routes/web.php';
 });

/*
|--------------------------------------------------------------------------
| Logger configure Setting
|--------------------------------------------------------------------------
|
| Logger configure Setting
|
*/

 $app->configureMonologUsing(function ($monolog) use ($app) {
     $monolog->pushHandler(
         (new Monolog\Handler\RotatingFileHandler(
             $app['config']['log.default.path']?$app['config']['log.default.path']:storage_path('logs/filtrs-api.txt'),
             7,
             //Monolog\Logger::DEBUG
             Monolog\Logger :: toMonologLevel($app['config']['log.default.level'])
         ))
         ->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true))
     );
     //$monolog->pushProcessor(new Monolog\Processor\IntrospectionProcessor());
     //$monolog->pushProcessor(new Monolog\Processor\WebProcessor());
    if (0) {
        $elasticSearchClient  = new Elastica\Client($app['config']['database.elastica.default']);
        $elasticSearchHandler = new Monolog\Handler\ElasticSearchHandler(
            $elasticSearchClient,
            ['index' => '61_api', 'type' => 'elastic_doc_type', ]
        );
        $monolog->pushHandler($elasticSearchHandler);
    }

    return $monolog;
 });
 
 return $app;
